package Test06;

//解压缩流

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class Test35 {
    public static void main(String[] args) throws IOException {

        //1、创建一个File表示要解压的压缩包
        File src = new File("D:\\工作\\dest2.zip");

        //2、创建一个File表示解压的目的地
        File dest = new File("D:\\工作");

        //3、调用方法
        upZip(src, dest);
    }

    //定义方法进行解压缩
    public static void upZip(File src, File dest) throws IOException {

        //创建一个解压缩流来读取压缩包中的数据
        ZipInputStream zip = new ZipInputStream(new FileInputStream(src));

        //先获取压缩包中的每一个zipEntry对象
        ZipEntry entry;//表示当前在压缩包中获取的文件或者文件夹
        while ((entry = zip.getNextEntry()) != null) {
            System.out.println(entry);
            if (entry.isDirectory()) {
                //文件夹：需要在dest中创建一个同样的文件夹
                File file = new File(dest, entry.toString());
                file.mkdirs();

            } else {
                //文件：需要读取到压缩包中的文件，并把他存放到目的地dest文件夹中（按照层级目录进行存放)
                FileOutputStream fos = new FileOutputStream(new File(dest, entry.toString()));
                int b;
                while ((b = zip.read()) != -1) {
                    //写到目的地
                    fos.write(b);
                }
                fos.close();
                //表示在压缩包中的一个文件处理完毕了。
                zip.closeEntry();
            }
        }
        zip.close();
    }
}
